/*
 * @lc app=leetcode.cn id=565 lang=cpp
 *
 * [565] 数组嵌套
 */

#include <iostream>
#include <map>
#include <set>
#include <vector>
using namespace std;

// @lc code=start
class Solution {
   public:
    int arrayNesting(vector<int>& nums) {
        int count = 0;
        int maxLength = 0;
        int isVisited[100001];

        // 初始化访问数组
        for (int i = 0; i < 100001; i++) {
            isVisited[i] = 0;
        }

        // 不断寻找环路，直至所有点都被访问过
        while (count < nums.size()) {
            // 寻找第一个没有访问过的节点，作为起点
            int i = 0;
            for (i = 0; i < nums.size(); i++) {
                if (isVisited[i] == 0) {
                    break;
                }
            }
            int begin = i;
            int basic_value = i;
            int length = 0;

            // 从该起点开始寻找环路
            do {
                begin = nums[begin];
                isVisited[begin] = 1;
                count++;
                length++;
            } while (begin != basic_value);

            // 如果该环路长度超过一致的最大长度，则更新最大长度信息
            if (length > maxLength) {
                maxLength = length;
            }
        }

        // 返回结果
        return maxLength;
    }
};
// @lc code=end
